
* install the following packages if missing
* ssc install boottest
* ssc install estout
* ssc install sencode
* ssc install spmap


***********************************
*                                 *
* PART 1: VALIDITY OF SLANT INDEX *
*                                 *
***********************************



***** Figure A1: Slant and 2018 vote shares
use "outlet party month level data.dta", clear
keep if tm > tm(2014m9) & tm <= tm(2018m9)

collapse (mean) slant nat_vote_share_2018, by(party)

gen labels = "Center Party"
replace labels = "Liberal Party" if party == "fp_l"
replace labels = "Christian Democrats" if party == "kd"
replace labels = "Moderate Party" if party == "m"
replace labels = "Green Party" if party == "mp"
replace labels = "Social Democrats" if party == "s"
replace labels = "Sweden Democrats" if party == "sd"
replace labels = "Left Party" if party == "v"

gen mpos = 3
replace mpos = 2 if party == "mp"

twoway (scatter slant nat_vote_share_2018, mlabel(labels) msize(*0.7) mlabvposition(mpos)) ///
       (lfit slant nat_vote_share_2018), ///
       graphregion(color(white)) scheme(s2mono) legend(off) ///
	   ylabel(10(5)26, nogrid angle(0)) ytitle("Avg. share of ideological phrases" " ") ///
	   xlabel(0(0.1)0.4) xtitle(" " "Vote share")



***** Figure A2: Slant over time, by party
use "outlet party month level data.dta", clear

keep slant party tm outlet
rename slant rel_
reshape wide rel_, i(tm outlet) j(party) string

graph bar (mean) rel_c rel_fp_l rel_kd rel_m rel_mp rel_s rel_sd rel_v, ///
 over(tm, label(labsize(large) angle(45) ticks) relabel(1 "2014" 2 " " 3 " " 4 " " 5 " " 6 " " 7 " " 8 " " 9 " " 10 " " 11 " " 12 " " ///
 13 "2015" 14 " " 15 " " 16 " " 17 " " 18 " " 19 " " 20 " " 21 " " 22 " " 23 " " 24 " " ///
 25 "2016" 26 " " 27 " " 28 " " 29 " " 30 " " 31 " " 32 " " 33 " " 34 " " 35 " " 36 " " ///
 37 "2017" 38 " " 39 " " 40 " " 41 " " 42 " " 43 " " 44 " " 45 " " 46 " " 47 " " 48 " " ///
 49 "2018" 50 " " 51 " " 52 " " 53 " " 54 " " 55 " " 56 " " 57 " " 58 " " 59 " " 60 " " ///
 61 "2019" 62 " " 63 " " 64 " ")) ///
 stack bar(1, color("0 153 51")) bar(2, color("107 183 236")) ///
 bar(3, color("35 25 119")) bar(4, color("27 73 221")) bar(5, color("131 207 57")) ///
 bar(6, color("238 32 32")) bar(7, color("221 221 0")) bar(8, color("175 0 0")) ///
 graphregion(color(white)) scale(*.6) b1title(" ") ylabel(, labsize(large) angle(0)) ///
 ytitle("Avg. share of ideological phrases", size(large)) ///
 legend(size(large) label(1 "Center Party") label(2 "Liberal Party") label(3 "Christian Democrats") ///
 label(4 "Moderate Party") label(5 "Green Party") label(6 "Social Democrats") ///
 label(7 "Sweden Democrats") label(8 "Left Party"))



***** Table A2: Newspaper slant and stated ideology
use "outlet party level data.dta", clear
global notes_obs_ols = "OLS estimates, using data at the newspaper-ideology level."
global notes_dep2 = "Dependent variable: newspaper slant (share of ideological phrases per million overall phrases)."
global notes_se = "Standard errors (in parentheses) are clustered by owner. Values in brackets are wild cluster bootstrap p-values."
global notes_affiliated = "Supported ideology takes the value 1 for ideologies endorsed by the newspaper, according to the outlet's self-description (see Table B1 for details)."

eststo clear
quietly eststo: reg slant match i.party_id if !missing(owner_slant), robust cluster(owner_id)
                boottest match, nogr seed(1234)
quietly eststo: reg slant match i.party_id i.outlet_id if !missing(owner_slant), robust cluster(owner_id)
                boottest match, nogr seed(1234)
quietly eststo: reg slant match i.party_id if ideology != "NA" & !missing(owner_slant), robust cluster(owner_id)
                boottest match, nogr seed(1234)
quietly eststo: reg slant match i.party_id i.outlet_id if ideology != "NA" & !missing(owner_slant), robust cluster(owner_id)
                boottest match, nogr seed(1234)
esttab, star(* 0.10 ** 0.05 *** 0.01) se compress nonotes varwidth(24) noobs ///
 cells(b(fmt(3) star) se(par fmt(3))) modelwidth(25) ///
 scalars("r2_a Adj. R^2" "N Observations") sfmt(3 0) ///
 title(Table A2: Newspaper slant and stated ideology) ///
 keep(match) coeflabels(match "Supported ideology (yes/no)") ///
 mtitles("All newspapers" "All newspapers" ///
 "Only outlets with stated ideology" "Only outlets with stated ideology") ///
 indicate("Ideology fixed effects = *party_id*" "Newspaper fixed effects = *outlet_id*") ///
 addnotes("Notes: $notes_obs_ols $notes_dep2 $notes_affiliated $notes_se" ///
 "* p<0.10, ** p<0.05, *** p<0.01")
 


***** Figure A3: Slant, by party and newspapers' stated ideology
quietly reg slant i.party_id i.outlet_id
predict slant_res, res 
 
collapse (mean) mean_slant=slant_res (sd) sd_slant=slant_res (count) n=slant_res, by(party match)
 
generate hi_slant = mean_slant + invttail(n-1,0.025)*(sd_slant / sqrt(n))
generate lo_slant = mean_slant - invttail(n-1,0.025)*(sd_slant / sqrt(n))

* (a) Center Party
graph twoway (bar mean_slant match if party == "c",  barwidth(0.5)) ///
 (rcap hi_slant lo_slant match if party == "c"), /// 
 scheme(s2mono) legend(off) ytitle("Residuals of slant towards" "Center Party", size(large)) ///
 ylabel(-4(2)4.7, labsize(large) angle(0)) xscale(range(-0.5 1.5)) ///
 xlabel(0 `""Other" "newspapers""' 1 `""Center" "newspapers (N = 27)""', labsize(large)) xtitle("") ///
 graphregion(color(white)) plotregion(margin(zero)) aspect(0.65) yline(0, lpattern(dash) lcolor(black))

* (b) Liberal Party
graph twoway (bar mean_slant match if party == "fp_l",  barwidth(0.5)) ///
 (rcap hi_slant lo_slant match if party == "fp_l"), /// 
 scheme(s2mono) legend(off) ytitle("Residuals of slant towards" "Liberal Party", size(large)) ///
 ylabel(-1(0.5)1, labsize(large) angle(0)) xscale(range(-0.5 1.5)) ///
 xlabel(0 `""Other" "newspapers""' 1 `""Liberal" "newspapers (N = 40)""', labsize(large)) xtitle("") ///
 graphregion(color(white)) plotregion(margin(zero)) aspect(0.65) yline(0, lpattern(dash) lcolor(black))

* (c) Christian Democrats
graph twoway (bar mean_slant match if party == "kd",  barwidth(0.5)) ///
 (rcap hi_slant lo_slant match if party == "kd"), /// 
 scheme(s2mono) legend(off) ytitle("Residuals of slant towards" "Christian Democrats", size(large)) ///
 ylabel(-6(3)6, labsize(large) angle(0)) xscale(range(-0.5 1.5)) ///
 xlabel(0 `""Other" "newspapers""' 1 `""Chistian/conservative" "newspapers (N = 10)""', labsize(large)) xtitle("") ///
 graphregion(color(white)) plotregion(margin(zero)) aspect(0.65) yline(0, lpattern(dash) lcolor(black))

* (d) Moderate Party
graph twoway (bar mean_slant match if party == "m",  barwidth(0.5)) ///
 (rcap hi_slant lo_slant match if party == "m"), /// 
 scheme(s2mono) legend(off) ytitle("Residuals of slant towards" "Moderate Party", size(large)) ///
 ylabel(-1(0.5)1, labsize(large) angle(0)) xscale(range(-0.5 1.5)) ///
 xlabel(0 `""Other" "newspapers""' 1 `""Moderate" "newspapers (N = 18)""', labsize(large)) xtitle("") //////
 graphregion(color(white)) plotregion(margin(zero)) aspect(0.65) yline(0, lpattern(dash) lcolor(black))

* (e) Green Party
graph twoway (bar mean_slant match if party == "mp",  barwidth(0.5)) ///
 (rcap hi_slant lo_slant match if party == "mp"), /// 
 scheme(s2mono) legend(off) ytitle("Residuals of slant towards" "Green Party", size(large)) ///
 ylabel(-16(8)16, labsize(large) angle(0)) xscale(range(-0.5 1.5)) ///
 xlabel(0 `""Other" "newspapers""' 1 `""Green" "newspapers (N = 2)""', labsize(large)) xtitle("") ///
 graphregion(color(white)) plotregion(margin(zero)) aspect(0.65) yline(0, lpattern(dash) lcolor(black))
 
* (f) Social Democrats
graph twoway (bar mean_slant match if party == "s",  barwidth(0.5)) ///
 (rcap hi_slant lo_slant match if party == "s"), /// 
 scheme(s2mono) legend(off) ytitle("Residuals of slant towards" "Social Democrats", size(large)) ///
 ylabel(-4(2)4, labsize(large) angle(0)) xscale(range(-0.5 1.5)) ///
 xlabel(0 `""Other" "newspapers""' 1 `""Social Democratic" "newspapers (N = 13)""', labsize(large)) xtitle("") ///
 graphregion(color(white)) plotregion(margin(zero)) aspect(0.65) yline(0, lpattern(dash) lcolor(black))

* (g) Sweden Democrats
graph twoway (bar mean_slant match if party == "sd",  barwidth(0.5)) ///
 (rcap hi_slant lo_slant match if party == "sd"), /// 
 scheme(s2mono) legend(off) ytitle("Residuals of slant towards" "Sweden Democrats", size(large)) ///
 ylabel(-6(3)6, labsize(large) angle(0)) xscale(range(-0.5 1.5)) ///
 xlabel(0 `""Other" "newspapers""' 1 `""Conservative" "newspapers (N = 2)""', labsize(large)) xtitle("") ///
 graphregion(color(white)) plotregion(margin(zero)) aspect(0.65) yline(0, lpattern(dash) lcolor(black))

* (h) Left Party
graph twoway (bar mean_slant match if party == "v",  barwidth(0.5)) ///
 (rcap hi_slant lo_slant match if party == "v"), /// 
 scheme(s2mono) legend(off) ytitle("Residuals of slant towards" "Left Party", size(large)) ///
 ylabel(-300(150)300, labsize(large) angle(0)) xscale(range(-0.5 1.5)) ///
 xlabel(0 `""Other" "newspapers""' 1 `""Left" "newspapers (N = 2)""', labsize(large)) xtitle("") ///
 graphregion(color(white)) plotregion(margin(zero)) aspect(0.65) yline(0, lpattern(dash) lcolor(black))
   
   

***** Figure A4: Left-right scores of political parties
use "left right scores of political parties.dta", clear

collapse (mean) rile, by(party)
gsort -rile
format rile %4.2f

gen n = _n

gen party_label = "US Republic Party"
replace party_label = "Center Party" if n == 2
replace party_label = "Liberal Party" if n == 3
replace party_label = "Christian Democrats" if n == 4
replace party_label = "Moderate Party" if n == 5
replace party_label = "Sweden Democrats" if n == 6
replace party_label = "US Democratic Party" if n == 7
replace party_label = "Green Party" if n == 8
replace party_label = "Social Democrats" if n == 9
replace party_label = "Left Party" if n == 10
sencode party_label, replace

levelsof party_label if n == 1 | n == 7, local(us)
levelsof party_label if n != 1 & n != 7, local(swe)

twoway (bar rile party_label if n == 1 | n == 7, horizontal barwidth(0.7) color(gs12)) ///
       (bar rile party_label if n != 1 & n != 7, horizontal barwidth(0.7) color(gs5)), ///
	   scheme(s2mono) graphregion(color(white)) legend(off) ytitle(" ") ///
	   ylabel(none, value angle(0)) ///
 ylabel(`us', add labcolor(gs12)) ///
 ylabel(`swe', add custom labcolor(black)) ///
 xtitle("Left-right score") xline(0, lwidth(thin))
 

 
***** Figure A5: Left-right score, by self-stated newspaper ideology
use "outlet level data.dta", clear
graph hbar (mean) rile_score, over(ideology_eng, sort(rile_score)) ///
           graphregion(color(white)) scheme(s2mono) ///
           ytitle("Avg. left-right score") yline(0, lwidth(thin)) 
 
 
 



 
 


**********************************
*                                *
* PART 2: DESCRIPTIVE STATISTICS *
*                                *
**********************************



***** Figure B2: Newspaper owners, by number of newspapers in January 2014
use "outlet party month level data.dta", clear
graph hbar (mean) outlets_per_owner if tm == tm(2014m1), graphregion(color(white)) scheme(s2mono) scale(0.9) ///
	over(owner, sort(outlets_per_owner) descending label(labsize(vsmall) labcolor(black))) ///
	ytitle(" " "Number of newspapers", size(small)) ylabel(, angle(horizontal) labsize(small))
	

***** Figure B3: Newspaper owners, by number of newspapers in April 2019
graph hbar (mean) outlets_per_owner if tm == tm(2019m4), graphregion(color(white)) scheme(s2mono) scale(0.9) ///
	over(owner, sort(outlets_per_owner) descending label(labsize(vsmall) labcolor(black))) ///
	ytitle(" " "Number of newspapers", size(small)) ylabel(, angle(horizontal) labsize(small))
	

bysort tm: egen total_abs_circ = sum(abs_circ)
gen share_circ = abs_circ/total_abs_circ
bysort owner tm: egen sum_share_circ = sum(share_circ)

***** Figure B4: Newspaper owners, by circulation share in January 2014
graph hbar (sum) share_circ if tm == tm(2014m1), graphregion(color(white)) scheme(s2mono) scale(0.9) ///
	over(owner, sort(sum_share_circ) descending label(labsize(vsmall) labcolor(black))) ///
	ytitle(" " "Share of total circulation", size(small)) ///
	ylabel(0(0.05)0.25, angle(horizontal) labsize(small))

***** Figure B5: Newspaper owners, by circulation share in April 2019
graph hbar (sum) share_circ if tm == tm(2019m4), graphregion(color(white)) scheme(s2mono) scale(0.9) ///
	over(owner, sort(sum_share_circ) descending label(labsize(vsmall) labcolor(black))) ///
	ytitle(" " "Share of total circulation", size(small)) ///
	ylabel(0(0.05)0.25, angle(horizontal) labsize(small))
	


***** Table 1: Summary statistics of main variables
use "outlet party level data.dta", clear
eststo clear
eststo: quietly estpost summarize ///
        slant slant_opinion slant_nonopinion owner_slant w_votes82_ w_votes18_ if !missing(owner_slant)
esttab, cells("mean(fmt(3)) sd(fmt(3)) min(fmt(3)) max(fmt(3)) count(fmt(0))") ///
 compress nonumbers noobs label modelwidth(16) ///
 title(Table 1: Summary statistics of main variables) varwidth(44) ///
 coeflabels(slant "Newspaper slant, all articles" ///
 slant_opinion "Newspaper slant, opinion articles" ///
 slant_nonopinion "Newspaper slant, straight news articles" /// 
 owner_slant "Avg. slant of other newspapers by same owner" ///
 w_votes82_ "Market ideology in 1982 (circ.-weighted votes per party)" ///
 w_votes18_ "Market ideology in 2018 (circ.-weighted votes per party)") ///
 addnotes("Notes: Slant is measured as the party-specific share of ideological phrases per million overall phrases. The data refer to max. 127 newspapers-owner combinations and 8 ideologies.")
 



 





****************************
*                          *
* PART 3: MAIN REGRESSIONS *
*                          *
****************************



***** Figure 1: Newspaper slant and co-owned slant
use "outlet party level data.dta", clear
drop if owner_slant==.
quietly reg slant w_votes18_ i.outlet_id i.party_id
predict res_slant, res

quietly reg owner_slant w_votes18_ i.outlet_id i.party_id
predict res_owner_slant, res

* a) Raw slant (correlation coefficient = 0.914, p-value = 0.000)
twoway (scatter slant owner_slant, msize(small)) ///
       (lfit slant owner_slant), ///
       scheme(s2mono) legend(off) ytitle(" " "Newspaper slant", size(large)) ///
       ylabel(, labsize(large) angle(0) nogrid) ///
       xlabel(, labsize(large)) xtitle("Avg. slant of co-owned newspapers", size(large)) ///
       graphregion(color(white))
pwcorr slant owner_slant, sig
	   
* b) Slant residuals (correlation coefficient = 0.628, p-value = 0.000)
twoway (scatter res_slant res_owner_slant, msize(small)) ///
       (lfit res_slant res_owner_slant), ///
       scheme(s2mono) legend(off) ytitle("Newspaper slant (residuals)", size(large)) ///
       ylabel(, labsize(large) angle(0) nogrid) ///
       xlabel(, labsize(large)) xtitle(" " "Avg. slant of co-owned newspapers (residuals)", size(large)) ///
       graphregion(color(white))
pwcorr res_slant res_owner_slant, sig



***** Table 2: Regression of newspaper slant on co-owned slant
use "outlet party level data.dta", clear

global notes_ols2 = "OLS estimates, using data at the newspaper-ideology level (N = 1,016). Observations do not include single-newspaper owners."
global notes_dep = "Dependent variable: share of ideological phrases per million overall phrases."
global notes_vote = "Market ideology is measured as the parties' number of votes in the newspaper’s area of circulation, where each municipality’s vote outcome is weighted by the share of readers living in the municipality."
global notes_anova = "Partial eta^2 is the share of variance explained by a regressor."
global notes_se = "Standard errors (in parentheses) are clustered by owner. Values in brackets are wild cluster bootstrap p-values."

eststo clear
quietly eststo: reg slant owner_slant w_votes82_ county_id* i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
			    boottest owner_slant==1, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
				quietly anova slant c.owner_slant c.w_votes82_ county_id* i.party_id
				estadd scalar share_owner = e(ss_1)/(e(ss_1)+e(rss))
				estadd scalar share_votes = e(ss_2)/(e(ss_2)+e(rss))
quietly eststo: reg slant owner_slant w_votes18_ county_id* i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
			    boottest owner_slant==1, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
				quietly anova slant c.owner_slant c.w_votes18_ county_id* i.party_id
				estadd scalar share_owner = e(ss_1)/(e(ss_1)+e(rss))
				estadd scalar share_votes = e(ss_2)/(e(ss_2)+e(rss))				
quietly eststo: reg slant owner_slant w_votes82_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
			    boottest owner_slant==1, nogr seed(1234)				
				boottest w_votes82_, nogr seed(1234)
				quietly anova slant c.owner_slant c.w_votes82_ outlet_id i.party_id
				estadd scalar share_owner = e(ss_1)/(e(ss_1)+e(rss))
				estadd scalar share_votes = e(ss_2)/(e(ss_2)+e(rss))				
quietly eststo: reg slant owner_slant w_votes18_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
			    boottest owner_slant==1, nogr seed(1234)				
				boottest w_votes18_, nogr seed(1234)
				quietly anova slant c.owner_slant c.w_votes18_ outlet_id i.party_id
				estadd scalar share_owner = e(ss_1)/(e(ss_1)+e(rss))
				estadd scalar share_votes = e(ss_2)/(e(ss_2)+e(rss))
esttab, star(* 0.10 ** 0.05 *** 0.01) se compress nonotes varwidth(44) noobs ///
 cells(b(fmt(3) star) se(par fmt(3))) modelwidth(12) nodepvar nomtitles ///
 scalars("share_owner Partial eta^2: avg. slant others" "share_votes Partial eta^2: market ideology" ///
 "r2_a Adj. R^2") sfmt(3 3 3) ///
 title(Table 2: Regression of newspaper slant on co-owned slant) ///
 keep(w_votes82_ w_votes18_ owner_slant) order(owner_slant) ///
 coeflabels(owner_slant "Avg. slant of other newspapers by same owner" ///
 w_votes82_ "Market ideology (according to 1982 election)" ///
 w_votes18_ "Market ideology (according to 2018 election)") ///
 indicate("Ideology fixed effects = *party_id*" "County fixed effects = county_id*" ///
 "Newspaper fixed effects = *outlet_id*") ///
 addnotes("Notes: $notes_ols2 $notes_dep $notes_vote $notes_anova $notes_se" ///
 "* p<0.10, ** p<0.05, *** p<0.01") 



***** Table 3: Regression of newspaper slant on co-owned slant, by market and owner characteristics
use "outlet party level data.dta", clear
global notes_ols2 = "OLS estimates, using data at the newspaper-ideology level (N = 1,016). Observations do not include single-newspaper owners."
global notes_inter = "The models include all constituent terms of the interactions (output omitted)."
global notes_abs = "Market size ranks the newspapers by the total population in the municipalities where the owner circulates."
global notes_income = "Average consumer income ranks the newspapers by the average income in their owner's total area of circulation, where the average income in each municipality of circulation are weighted by the share of readers living in the municipality."
global notes_vot = "Voter heterogeneity ranks the newspaper owners by the within-owner average standard deviation of 2018 vote shares (e.g., the first quartile include outlets by those owners that circulate in markets with rather homogenous voters, whereas the fourth quartile captures outlets by owners in heterogenous areas."

eststo clear
quietly eststo: reg slant c.owner_slant##pop_size_xt w_votes18_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest c.owner_slant#2.pop_size_xt, nogr seed(1234)
				boottest c.owner_slant#3.pop_size_xt, nogr seed(1234)
				boottest c.owner_slant#4.pop_size_xt, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
quietly eststo: reg slant c.owner_slant##w_income_mean_xt w_votes18_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest c.owner_slant#2.w_income_mean_xt, nogr seed(1234)
				boottest c.owner_slant#3.w_income_mean_xt, nogr seed(1234)
				boottest c.owner_slant#4.w_income_mean_xt, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
quietly eststo: reg slant c.owner_slant##avg_sd_18_xt w_votes18_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest c.owner_slant#2.avg_sd_18_xt, nogr seed(1234)
				boottest c.owner_slant#3.avg_sd_18_xt, nogr seed(1234)
				boottest c.owner_slant#4.avg_sd_18_xt, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)	
esttab, star(* 0.10 ** 0.05 *** 0.01) se compress nonotes varwidth(44) noobs ///
 cells(b(fmt(3) star) se(par fmt(3))) modelwidth(12) nodepvar nomtitles ///
 scalars("r2_a Adj. R^2") sfmt(3) ///
 title(Table 3: Regression of newspaper slant on co-owned slant, by market and owner characteristics) ///
 refcat(2.pop_size_xt#c.owner_slant "Market size (reference category: 1st quartile)" ///
 2.w_income_mean_xt#c.owner_slant "Average consumer income (reference category: 1st quartile)" ///
 2.avg_sd_18_xt#c.owner_slant "Voter heterogeneity (reference category: 1st quartile)") ///
 keep(owner_slant 2.pop_size_xt#c.owner_slant 3.pop_size_xt#c.owner_slant ///
 4.pop_size_xt#c.owner_slant 2.w_income_mean_xt#c.owner_slant ///
 3.w_income_mean_xt#c.owner_slant 4.w_income_mean_xt#c.owner_slant  ///
 2.avg_sd_18_xt#c.owner_slant 3.avg_sd_18_xt#c.owner_slant ///
 4.avg_sd_18_xt#c.owner_slant w_votes18_) ///
 order(owner_slant 2.pop_size_xt#c.owner_slant 3.pop_size_xt#c.owner_slant ///
 4.pop_size_xt#c.owner_slant 2.w_income_mean_xt#c.owner_slant ///
 3.w_income_mean_xt#c.owner_slant 4.w_income_mean_xt#c.owner_slant  ///
 2.avg_sd_18_xt#c.owner_slant 3.avg_sd_18_xt#c.owner_slant ///
 4.avg_sd_18_xt#c.owner_slant w_votes18_) ///
 coeflabels(owner_slant "Avg. slant of other newspapers by same owner" ///
 2.pop_size_xt#c.owner_slant "Avg. slant others x 2nd quartile" ///
 3.pop_size_xt#c.owner_slant "Avg. slant others x 3rd quartile" ///
 4.pop_size_xt#c.owner_slant "Avg. slant others x 4th quartile" ///
 2.w_income_mean_xt#c.owner_slant "Avg. slant others x 2nd quartile" ///
 3.w_income_mean_xt#c.owner_slant "Avg. slant others x 3rd quartile" ///
 4.w_income_mean_xt#c.owner_slant "Avg. slant others x 4th quartile" ///
 2.avg_sd_18_xt#c.owner_slant "Avg. slant others x 2nd quartile" ///
 3.avg_sd_18_xt#c.owner_slant "Avg. slant others x 3rd quartile" ///
 4.avg_sd_18_xt#c.owner_slant "Avg. slant others x 4th quartile" ///
 w_votes18_ "Market ideology (according to 2018 election)") ///
 indicate("Ideology fixed effects = *party_id*" ///
 "Newspaper fixed effects = *outlet_id*") ///
 addnotes("Notes: $notes_ols2 $notes_dep $notes_abs $notes_income $notes_vot $notes_vote $notes_inter $notes_se" ///
 "* p<0.10, ** p<0.05, *** p<0.01")
 
  

***** Table 4: Regression of newspaper slant on co-owned slant, by type of content
use "outlet party level data.dta", clear
global notes_ols_opinion = "OLS estimates, using data at the newspaper-ideology level (N = 936). Observations do not include single-newspaper owners."
global notes_dep = "Dependent variable: share of ideological phrases per million overall phrases."
global notes_vote = "Market ideology is measured as the parties' number of votes in the newspaper’s area of circulation, where each municipality’s vote outcome is weighted by the share of readers living in the municipality."
global notes_anova = "Partial eta^2 is the share of variance explained by a regressor."
global notes_se = "Standard errors (in parentheses) are clustered by owner. Values in brackets are wild cluster bootstrap p-values."
* Panel A: Straight news articles
eststo clear
quietly eststo: reg slant_nonopinion owner_slant_nonopinion w_votes82_ county_id* i.party_id, cluster(owner_id)
                boottest owner_slant_nonopinion, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
				quietly anova slant_nonopinion c.owner_slant_nonopinion c.w_votes82_ county_id* i.party_id
				estadd scalar share_owner = e(ss_1)/(e(ss_1)+e(rss))
				estadd scalar share_votes = e(ss_2)/(e(ss_2)+e(rss))
quietly eststo: reg slant_nonopinion owner_slant_nonopinion w_votes18_ county_id* i.party_id, cluster(owner_id)
                boottest owner_slant_nonopinion, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
				quietly anova slant_nonopinion c.owner_slant_nonopinion c.w_votes18_ county_id* i.party_id
				estadd scalar share_owner = e(ss_1)/(e(ss_1)+e(rss))
				estadd scalar share_votes = e(ss_2)/(e(ss_2)+e(rss))				
quietly eststo: reg slant_nonopinion owner_slant_nonopinion w_votes82_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant_nonopinion, nogr seed(1234)			
				boottest w_votes82_, nogr seed(1234)
				quietly anova slant_nonopinion c.owner_slant_nonopinion c.w_votes82_ outlet_id i.party_id
				estadd scalar share_owner = e(ss_1)/(e(ss_1)+e(rss))
				estadd scalar share_votes = e(ss_2)/(e(ss_2)+e(rss))				
quietly eststo: reg slant_nonopinion owner_slant_nonopinion w_votes18_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant_nonopinion, nogr seed(1234)			
				boottest w_votes18_, nogr seed(1234)
				quietly anova slant_nonopinion c.owner_slant_nonopinion c.w_votes18_ outlet_id i.party_id
				estadd scalar share_owner = e(ss_1)/(e(ss_1)+e(rss))
				estadd scalar share_votes = e(ss_2)/(e(ss_2)+e(rss))
esttab, star(* 0.10 ** 0.05 *** 0.01) se compress nonotes varwidth(44) noobs ///
 cells(b(fmt(3) star) se(par fmt(3))) modelwidth(12) nodepvar nomtitles ///
 scalars("share_owner Partial eta^2: avg. slant other" "share_votes Partial eta^2: market ideology" ///
 "r2_a Adj. R^2") sfmt(3 3 3) ///
 title(Table 4: Regression of newspaper slant on co-owned slant, by type of content) ///
 keep(w_votes82_ w_votes18_ owner_slant_nonopinion) order(owner_slant_nonopinion) ///
 coeflabels(owner_slant_nonopinion "Avg. slant of other newspapers by same owner" ///
 w_votes82_ "Market ideology (according to 1982 election)" ///
 w_votes18_ "Market ideology (according to 2018 election)") ///
 indicate("Ideology fixed effects = *party_id*" "County fixed effects = county_id*" ///
 "Newspaper fixed effects = *outlet_id*")
* Panel B: Opinion articles
eststo clear
quietly eststo: reg slant_opinion owner_slant_opinion w_votes82_ county_id* i.party_id, cluster(owner_id)
                boottest owner_slant_opinion, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
				quietly anova slant_opinion c.owner_slant_opinion c.w_votes82_ county_id* i.party_id
				estadd scalar share_owner = e(ss_1)/(e(ss_1)+e(rss))
				estadd scalar share_votes = e(ss_2)/(e(ss_2)+e(rss))
quietly eststo: reg slant_opinion owner_slant_opinion w_votes18_ county_id* i.party_id, cluster(owner_id)
                boottest owner_slant_opinion, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
				quietly anova slant_opinion c.owner_slant_opinion c.w_votes18_ county_id* i.party_id
				estadd scalar share_owner = e(ss_1)/(e(ss_1)+e(rss))
				estadd scalar share_votes = e(ss_2)/(e(ss_2)+e(rss))				
quietly eststo: reg slant_opinion owner_slant_opinion w_votes82_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant_opinion, nogr seed(1234)			
				boottest w_votes82_, nogr seed(1234)
				quietly anova slant_opinion c.owner_slant_opinion c.w_votes82_ outlet_id i.party_id
				estadd scalar share_owner = e(ss_1)/(e(ss_1)+e(rss))
				estadd scalar share_votes = e(ss_2)/(e(ss_2)+e(rss))				
quietly eststo: reg slant_opinion owner_slant_opinion w_votes18_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant_opinion, nogr seed(1234)				
				boottest w_votes18_, nogr seed(1234)
				quietly anova slant_opinion c.owner_slant_opinion c.w_votes18_ outlet_id i.party_id
				estadd scalar share_owner = e(ss_1)/(e(ss_1)+e(rss))
				estadd scalar share_votes = e(ss_2)/(e(ss_2)+e(rss))
esttab, star(* 0.10 ** 0.05 *** 0.01) se compress nonotes varwidth(44) noobs ///
 cells(b(fmt(3) star) se(par fmt(3))) modelwidth(12) nodepvar nomtitles ///
 scalars("share_owner Partial eta^2: avg. slant other" "share_votes Partial eta^2: market ideology" ///
 "r2_a Adj. R^2") sfmt(3 3 3) ///
 keep(w_votes82_ w_votes18_ owner_slant_opinion) order(owner_slant_opinion) ///
 coeflabels(owner_slant_opinion "Avg. slant of other newspapers by same owner" ///
 w_votes82_ "Market ideology (according to 1982 election)" ///
 w_votes18_ "Market ideology (according to 2018 election)") ///
 indicate("Ideology fixed effects = *party_id*" "County fixed effects = county_id*" ///
 "Newspaper fixed effects = *outlet_id*") ///
 addnotes("Notes: $notes_ols_opinion $notes_dep $notes_vote $notes_anova $notes_se" ///
 "* p<0.10, ** p<0.05, *** p<0.01") 


 
***** Table 5: Role of elections for the relationship between newspaper slant and co-owned slant
use "outlet party month level data.dta", clear
global notes_ols_tm = "OLS estimates. The regressions use data at the newspaper-ideology-month level (N = 54,680)."
global notes_dep = "Dependent variable: share of ideological phrases per million overall phrases."
global notes_elect = "Election is a binary variable that equals 1 in the month before and month of a national election, and 0 otherwise."
global notes_se = "Standard errors (in parentheses) are clustered by owner. Values in brackets are wild cluster bootstrap p-values."
global notes_vote = "Market ideology is measured as the parties' number of votes in the newspaper’s area of circulation, where each municipality’s vote outcome is weighted by the share of readers living in the municipality."

eststo clear
quietly eststo: reg slant c.owner_slant##elect ///
                i.outlet_id i.party_id i.month i.year, cluster(owner_id)
				boottest owner_slant, nogr seed(1234)
				boottest 1.elect, nogr seed(1234)
                boottest 1.elect#c.owner_slant, nogr seed(1234)
quietly eststo: reg slant c.owner_slant##elect w_votes82_ ///
                i.outlet_id i.party_id i.month i.year, cluster(owner_id)
				boottest owner_slant, nogr seed(1234)
				boottest 1.elect, nogr seed(1234)
                boottest 1.elect#c.owner_slant, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant c.owner_slant##elect w_votes18_ ///
                i.outlet_id i.party_id i.month i.year, cluster(owner_id)
				boottest owner_slant, nogr seed(1234)
				boottest 1.elect, nogr seed(1234)
                boottest 1.elect#c.owner_slant, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
esttab, star(* 0.10 ** 0.05 *** 0.01) se compress nonotes varwidth(44) noobs ///
 cells(b(fmt(3) star) se(par fmt(3))) modelwidth(12) ///
 mtitles("Slant" "Slant" "Slant") ///
 scalars("r2_a Adj. R^2") sfmt(3) ///
 title(Table 4: Role of elections for the relationship between newspaper slant and co-owned slant) ///
 keep(owner_slant 1.elect 1.elect#c.owner_slant w_votes82_ w_votes18_) ///
 coeflabel(owner_slant "Avg. slant of other newspapers by same owner" ///
 1.elect "Election (yes/no)" 1.elect#c.owner_slant "Avg. slant others x election" ///
 w_votes82_ "Market ideology (according to 1982 election)" ///
 w_votes18_ "Market ideology (according to 2018 election)") ///
 indicate("Newspaper fixed effects = *outlet_id*" "Ideology fixed effects = *party_id*" ///
 "Year and month fixed effects = *year* *month*") ///
 addnotes("Notes: $notes_ols_tm $notes_dep $notes_elect $notes_vote $notes_se" ///
 "* p<0.10, ** p<0.05, *** p<0.01")
 
 
 









 
**********************
*                    *
* PART 4: ROBUSTNESS *
*                    *
**********************
 
 

***** Table B3: Regression of newspaper slant on co-owned slant (market ideology based on vote shares)
use "outlet party level data.dta", clear

global notes_ols2 = "OLS estimates, using data at the newspaper-ideology level (N = 1,016). Observations do not include single-newspaper owners."
global notes_dep = "Dependent variable: share of ideological phrases per million overall phrases."
global notes_se = "Standard errors (in parentheses) are clustered by owner. Values in brackets are wild cluster bootstrap p-values."
global notes_vote = "Market ideology is measured as parties' vote share in the newspaper’s area of circulation, where each municipality's vote outcome is weighted by the share of readers living in the municipality."

eststo clear
quietly eststo: reg slant owner_slant w_voteshare82_ county_id* i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest w_voteshare82_, nogr seed(1234)
quietly eststo: reg slant owner_slant w_voteshare18_ county_id* i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest w_voteshare18_, nogr seed(1234)				
quietly eststo: reg slant owner_slant w_voteshare82_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest w_voteshare82_, nogr seed(1234)
quietly eststo: reg slant owner_slant w_voteshare18_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest w_voteshare18_, nogr seed(1234)			
esttab, star(* 0.10 ** 0.05 *** 0.01) se compress nonotes varwidth(44) noobs ///
 cells(b(fmt(3) star) se(par fmt(3))) modelwidth(12) nodepvar nomtitles ///
 scalars("r2_a Adj. R^2") sfmt(3) ///
 title(Table B3: Regression of newspaper slant on co-owned slant (market ideology based on vote shares)) ///
 keep(w_voteshare82_ w_voteshare18_ owner_slant) order(owner_slant) ///
 coeflabels(owner_slant "Avg. slant of other newspapers by same owner" ///
 w_voteshare82_ "Market ideology 1982 (weighted vote share)" ///
 w_voteshare18_ "Market ideology 2018 (weighted vote share)") ///
 indicate("Ideology fixed effects = *party_id*" "County fixed effects = county_id*" ///
 "Newspaper fixed effects = *outlet_id*") ///
 addnotes("Notes: $notes_ols2 $notes_dep $notes_vote $notes_se" ///
 "* p<0.10, ** p<0.05, *** p<0.01")
 
 
 
***** Table B4: Regression of newspaper slant on co-owned slant (100 top expressions used to construct slant measure)
use "outlet party level data.dta", clear
global notes_ols2 = "OLS estimates, using data at the newspaper-ideology level (N = 1,016). Observations do not include single-newspaper owners."
global notes_dep = "Dependent variable: share of ideological phrases per million overall phrases."
global notes_se = "Standard errors (in parentheses) are clustered by owner. Values in brackets are wild cluster bootstrap p-values."
global notes_vote = "Market ideology is measured as the parties' number of votes in the newspaper’s area of circulation, where each municipality’s vote outcome is weighted by the share of readers living in the municipality."

eststo clear
quietly eststo: reg slant100 owner_slant100 w_votes82_ county_id* i.party_id, cluster(owner_id)
                boottest owner_slant100, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant100 owner_slant100 w_votes18_ county_id* i.party_id, cluster(owner_id)
                boottest owner_slant100, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
quietly eststo: reg slant100 owner_slant100 w_votes82_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant100, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant100 owner_slant100 w_votes18_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant100, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
esttab, star(* 0.10 ** 0.05 *** 0.01) se compress nonotes varwidth(44) noobs ///
 cells(b(fmt(3) star) se(par fmt(3))) modelwidth(12) nodepvar nomtitles ///
 scalars("r2_a Adj. R^2") sfmt(3) ///
 title(Table B4: Regression of newspaper slant on co-owned slant (100 top expressions used to construct slant measure)) ///
 keep(w_votes82_ w_votes18_ owner_slant100) order(owner_slant100) ///
 coeflabels(owner_slant100 "Avg. slant of other newspapers by same owner" ///
 w_votes82_ "Market ideology (according to 1982 election)" ///
 w_votes18_ "Market ideology (according to 2018 election)") ///
 indicate("Ideology fixed effects = *party_id*" "County fixed effects = county_id*" ///
 "Newspaper fixed effects = *outlet_id*") ///
 addnotes("Notes: $notes_ols2 $notes_dep $notes_vote $notes_se" ///
 "* p<0.10, ** p<0.05, *** p<0.01")

 

***** Table B5: Regression of newspaper slant on co-owned slant (1,000 top expressions used to construct slant measure)
use "outlet party level data.dta", clear
global notes_ols2 = "OLS estimates, using data at the newspaper-ideology level (N = 1,016). Observations do not include single-newspaper owners."
global notes_dep = "Dependent variable: share of ideological phrases per million overall phrases."
global notes_se = "Standard errors (in parentheses) are clustered by owner. Values in brackets are wild cluster bootstrap p-values."
global notes_vote = "Market ideology is measured as the parties' number of votes in the newspaper’s area of circulation, where each municipality’s vote outcome is weighted by the share of readers living in the municipality."

eststo clear
quietly eststo: reg slant1000 owner_slant1000 w_votes82_ county_id* i.party_id, cluster(owner_id)
                boottest owner_slant1000, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant1000 owner_slant1000 w_votes18_ county_id* i.party_id, cluster(owner_id)
                boottest owner_slant1000, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
quietly eststo: reg slant1000 owner_slant1000 w_votes82_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant1000, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant1000 owner_slant1000 w_votes18_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant1000, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
esttab, star(* 0.10 ** 0.05 *** 0.01) se compress nonotes varwidth(44) noobs ///
 cells(b(fmt(3) star) se(par fmt(3))) modelwidth(12) nodepvar nomtitles ///
 scalars("r2_a Adj. R^2") sfmt(3) ///
 title(Table B5: Regression of newspaper slant on co-owned slant (1,000 top expressions used to construct slant measure)) ///
 keep(w_votes82_ w_votes18_ owner_slant1000) order(owner_slant1000) ///
 coeflabels(owner_slant1000 "Avg. slant of other newspapers by same owner" ///
 w_votes82_ "Market ideology (according to 1982 election)" ///
 w_votes18_ "Market ideology (according to 2018 election)") ///
 indicate("Ideology fixed effects = *party_id*" "County fixed effects = county_id*" ///
 "Newspaper fixed effects = *outlet_id*") ///
 addnotes("Notes: $notes_ols2 $notes_dep $notes_vote $notes_se" ///
 "* p<0.10, ** p<0.05, *** p<0.01")
 
 
 
***** Table B6: Regression of newspaper slant on average slant of all newspapers held by other owners (placebo)
use "outlet party level data.dta", clear
global notes_ols2a = "OLS estimates, using data at the newspaper-ideology level (N = 1,016)."
global notes_dep = "Dependent variable: share of ideological phrases per million overall phrases."
global notes_se = "Standard errors (in parentheses) are clustered by owner. Values in brackets are wild cluster bootstrap p-values."
global notes_vote = "Market ideology is measured as the parties' number of votes in the newspaper’s area of circulation, where each municipality’s vote outcome is weighted by the share of readers living in the municipality."

eststo clear
quietly eststo: reg slant owner_slant_placebo w_votes82_ county_id* i.party_id, cluster(owner_id)
                boottest owner_slant_placebo, nogr seed(1234)
                boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant owner_slant_placebo w_votes18_ county_id* i.party_id, cluster(owner_id)
                boottest owner_slant_placebo, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
quietly eststo: reg slant owner_slant_placebo w_votes82_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant_placebo, nogr seed(1234)
                boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant owner_slant_placebo w_votes18_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant_placebo, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
esttab, star(* 0.10 ** 0.05 *** 0.01) se compress nonotes varwidth(44) noobs ///
 cells(b(fmt(3) star) se(par fmt(3))) modelwidth(12) nodepvar nomtitles ///
 scalars("r2_a Adj. R^2") sfmt(3) ///
 title(Table B6: Regression of newspaper slant on average slant of all newspapers held by other owners (placebo)) ///
 keep(w_votes82_ w_votes18_ owner_slant_placebo) order(owner_slant_placebo) ///
 coeflabels(owner_slant_placebo "Avg. slant of all newspapers" ///
 w_votes82_ "Market ideology (according to 1982 election)" ///
 w_votes18_ "Market ideology (according to 2018 election)") ///
 indicate("Ideology fixed effects = *party_id*" "County fixed effects = county_id*" ///
 "Newspaper fixed effects = *outlet_id*") ///
 addnotes("Notes: $notes_ols2a $notes_dep $notes_vote $notes_se" ///
 "* p<0.10, ** p<0.05, *** p<0.01") 
 
 

***** Table B7: Regression of newspaper slant on co-owned slant (excluding owners holding less than three newspapers)
use "outlet party level data.dta", clear
global notes_ols_two = "OLS estimates, using data at the newspaper-ideology level (N = 936)."
global notes_dep = "Dependent variable: share of ideological phrases per million overall phrases."
global notes_se = "Standard errors (in parentheses) are clustered by owner. Values in brackets are wild cluster bootstrap p-values."
global notes_vote = "Market ideology is measured as the parties' number of votes in the newspaper’s area of circulation, where each municipality’s vote outcome is weighted by the share of readers living in the municipality."

eststo clear
quietly eststo: reg slant owner_slant w_votes82_ county_id* i.party_id if outlets_per_owner > 2, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant owner_slant w_votes18_ county_id* i.party_id if outlets_per_owner > 2, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
quietly eststo: reg slant owner_slant w_votes82_ i.outlet_id i.party_id if outlets_per_owner > 2, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant owner_slant w_votes18_ i.outlet_id i.party_id if outlets_per_owner > 2, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
esttab, star(* 0.10 ** 0.05 *** 0.01) se compress nonotes varwidth(44) noobs ///
 cells(b(fmt(3) star) se(par fmt(3))) modelwidth(12) nodepvar nomtitles ///
 scalars("r2_a Adj. R^2") sfmt(3) ///
 title(Table B7: Regression of newspaper slant on co-owned slant (excluding owners holding less than three newspapers)) ///
 keep(w_votes82_ w_votes18_ owner_slant) order(owner_slant) ///
 coeflabels(owner_slant "Avg. slant of other newspapers by same owner" ///
 w_votes82_ "Market ideology (according to 1982 election)" ///
 w_votes18_ "Market ideology (according to 2018 election)") ///
 indicate("Ideology fixed effects = *party_id*" "County fixed effects = county_id*" ///
 "Newspaper fixed effects = *outlet_id*") ///
 addnotes("Notes: $notes_ols_two $notes_dep $notes_vote $notes_se" ///
 "* p<0.10, ** p<0.05, *** p<0.01")
 
 

***** Table B8: Regression of newspaper slant on co-owned slant (excluding papers with ownership change during sample period)
use "outlet party level data.dta", clear
global notes_ols_trans = "OLS estimates, using data at the newspaper-ideology level (N = 752). Observations do not include single-newspaper owners."
global notes_dep = "Dependent variable: share of ideological phrases per million overall phrases."
global notes_se = "Standard errors (in parentheses) are clustered by owner. Values in brackets are wild cluster bootstrap p-values."
global notes_vote = "Market ideology is measured as the parties' number of votes in the newspaper's area of circulation, where each municipality's vote outcome is weighted by the share of readers living in the municipality."

eststo clear
quietly eststo: reg slant owner_slant w_votes82_ county_id* i.party_id if missing(transaction), cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant owner_slant w_votes18_ county_id* i.party_id if missing(transaction), cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
quietly eststo: reg slant owner_slant w_votes82_ i.outlet_id i.party_id if missing(transaction), cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant owner_slant w_votes18_ i.outlet_id i.party_id if missing(transaction), cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
esttab, star(* 0.10 ** 0.05 *** 0.01) se compress nonotes varwidth(44) noobs ///
 cells(b(fmt(3) star) se(par fmt(3))) modelwidth(12) nodepvar nomtitles ///
 scalars("r2_a Adj. R^2") sfmt(3) ///
 title(Table B8: Regression of newspaper slant on co-owned slant (excluding papers with ownership change during sample period)) ///
 keep(w_votes82_ w_votes18_ owner_slant) order(owner_slant) ///
 coeflabels(owner_slant "Avg. slant of other newspapers by same owner" ///
 w_votes82_ "Market ideology (according to 1982 election)" ///
 w_votes18_ "Market ideology (according to 2018 election)") ///
 indicate("Ideology fixed effects = *party_id*" "County fixed effects = county_id*" ///
 "Newspaper fixed effects = *outlet_id*") ///
 addnotes("Notes: $notes_ols_trans $notes_dep $notes_vote $notes_se" ///
 "* p<0.10, ** p<0.05, *** p<0.01") 
 

 
***** Table B9: Regression of newspaper slant on co-owned slant (using inverse of number of newspapers per owner as regression weights)
use "outlet party level data.dta", clear
global notes_ols2_w = "Weighted OLS estimates, using data at the newspaper-ideology level (N = 1,016). Observations do not include single-newspaper owners."
global notes_dep = "Dependent variable: share of ideological phrases per million overall phrases."
global notes_se = "Standard errors (in parentheses) are clustered by owner. Values in brackets are wild cluster bootstrap p-values."
global notes_vote = "Market ideology is measured as the parties' number of votes in the newspaper’s area of circulation, where each municipality’s vote outcome is weighted by the share of readers living in the municipality."

eststo clear
quietly eststo: reg slant owner_slant w_votes82_ county_id* i.party_id [iweight=inv_weight], cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant owner_slant w_votes18_ county_id* i.party_id [iweight=inv_weight], cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
quietly eststo: reg slant owner_slant w_votes82_ i.outlet_id i.party_id [iweight=inv_weight], cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant owner_slant w_votes18_ i.outlet_id i.party_id [iweight=inv_weight], cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
esttab, star(* 0.10 ** 0.05 *** 0.01) se compress nonotes varwidth(44) noobs ///
 cells(b(fmt(3) star) se(par fmt(3))) modelwidth(12) nodepvar nomtitles ///
 scalars("r2_a Adj. R^2") sfmt(3) ///
 title(Table B9: Regression of newspaper slant on co-owned slant (using inverse of number of newspapers per owner as regression weights)) ///
 keep(w_votes82_ w_votes18_ owner_slant) order(owner_slant) ///
 coeflabels(owner_slant "Avg. slant of other newspapers by same owner" ///
 w_votes82_ "Market ideology (according to 1982 election)" ///
 w_votes18_ "Market ideology (according to 2018 election)") ///
 indicate("Ideology fixed effects = *party_id*" "County fixed effects = county_id*" ///
 "Newspaper fixed effects = *outlet_id*") ///
 addnotes("Notes: $notes_ols2_w $notes_dep $notes_vote $notes_se" ///
 "* p<0.10, ** p<0.05, *** p<0.01")
  
 

***** Table B10: Regression of newspapers' left-right scores on co-owned left-right scores
use "outlet level data.dta", clear

global notes_coll = "OLS estimates, using data at the newspaper level (N = 127)."
global notes_dep_score = "Dependent variable: left-right score as described in Section 4.4 in the main text."
global notes_se = "Standard errors (in parentheses) are clustered by owner. Values in brackets are wild cluster bootstrap p-values."
global notes_ideol_score = "Market ideology is measured as the left-right score of voting in the newspaper’s area of circulation, where each municipality’s vote outcome is weighted by the share of readers living in the municipality."
global notes_anova = "Partial eta^2 is the share of variance explained by a regressor."

eststo clear
quietly eststo: reg rile_score owner_rile_score w_votes82_, cluster(owner_id)
                boottest owner_rile_score, nogr seed(1234)
				boottest w_votes82_score, nogr seed(1234)
				quietly anova rile_score c.owner_rile_score c.w_votes82_
				estadd scalar share_owner = e(ss_1)/(e(ss_1)+e(rss))
				estadd scalar share_votes = e(ss_2)/(e(ss_2)+e(rss))
quietly eststo: reg rile_score owner_rile_score w_votes18_, cluster(owner_id)
                boottest owner_rile_score, nogr seed(1234)
				boottest w_votes18_score, nogr seed(1234)
				quietly anova rile_score c.owner_rile_score c.w_votes82_
				estadd scalar share_owner = e(ss_1)/(e(ss_1)+e(rss))
				estadd scalar share_votes = e(ss_2)/(e(ss_2)+e(rss))
quietly eststo: reg rile_score owner_rile_score w_votes82_ county_id*, cluster(owner_id)
                boottest owner_rile_score, nogr seed(1234)
				boottest w_votes82_score, nogr seed(1234)
				quietly anova rile_score c.owner_rile_score c.w_votes82_ county_id*
				estadd scalar share_owner = e(ss_1)/(e(ss_1)+e(rss))
				estadd scalar share_votes = e(ss_2)/(e(ss_2)+e(rss))
quietly eststo: reg rile_score owner_rile_score w_votes18_ county_id*, cluster(owner_id)
                boottest owner_rile_score, nogr seed(1234)
				boottest w_votes18_score, nogr seed(1234)
				quietly anova rile_score c.owner_rile_score c.w_votes82_ county_id*
				estadd scalar share_owner = e(ss_1)/(e(ss_1)+e(rss))
				estadd scalar share_votes = e(ss_2)/(e(ss_2)+e(rss))
esttab, star(* 0.10 ** 0.05 *** 0.01) se compress nonotes varwidth(44) noobs ///
 cells(b(fmt(3) star) se(par fmt(3))) modelwidth(12) nodepvar nomtitles ///
 scalars("share_owner Partial eta^2: avg. score others" "share_votes Partial eta^2: market ideology" ///
 "r2_a Adj. R^2") sfmt(3 3 3) ///
 title(Table B10: Regression of newspapers' left-right scores on co-owned left-right scores) ///
 keep(w_votes82_score w_votes18_score owner_rile_score) order(owner_rile_score) ///
 coeflabels(owner_rile_score "Avg. left-right score of other newspapers by same owner" ///
 w_votes82_score "Market left-right score (according to 1982 election)" ///
 w_votes18_score "Market left-right score (according to 2018 election)") ///
 indicate("County fixed effects = county_id*") ///
 addnotes("Notes: $notes_coll $notes_dep_score $notes_ideol_score $notes_anova $notes_se" ///
 "* p<0.10, ** p<0.05, *** p<0.01")
 


***** Table B11: Regression of newspaper slant on co-owned slant (excluding national newspapers)
use "outlet party level data.dta", clear
gen nat = 0
replace nat = 1 if outlet == "Dagbladet" | outlet == "Dagens Nyheter" | outlet == "Dagens Industri"
global notes_ols_nat = "OLS estimates, using data at the newspaper-ideology level (N = 992). Observations do not include single-newspaper owners."
global notes_dep = "Dependent variable: share of ideological phrases per million overall phrases."
global notes_se = "Standard errors (in parentheses) are clustered by owner. Values in brackets are wild cluster bootstrap p-values."
global notes_vote = "Market ideology is measured as the parties' number of votes in the newspaper's area of circulation, where each municipality's vote outcome is weighted by the share of readers living in the municipality."

eststo clear
quietly eststo: reg slant owner_slant w_votes82_ county_id* i.party_id if nat == 0, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant owner_slant w_votes18_ county_id* i.party_id if nat == 0, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
quietly eststo: reg slant owner_slant w_votes82_ i.outlet_id i.party_id if nat == 0, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant owner_slant w_votes18_ i.outlet_id i.party_id if nat == 0, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
esttab, star(* 0.10 ** 0.05 *** 0.01) se compress nonotes varwidth(44) noobs ///
 cells(b(fmt(3) star) se(par fmt(3))) modelwidth(12) nodepvar nomtitles ///
 scalars("r2_a Adj. R^2") sfmt(3) ///
 title(Table B11: Regression of newspaper slant on co-owned slant (excluding national newspapers)) ///
 keep(w_votes82_ w_votes18_ owner_slant) order(owner_slant) ///
 coeflabels(owner_slant "Avg. slant of other newspapers by same owner" ///
 w_votes82_ "Market ideology (according to 1982 election)" ///
 w_votes18_ "Market ideology (according to 2018 election)") ///
 indicate("Ideology fixed effects = *party_id*" "County fixed effects = county_id*" ///
 "Newspaper fixed effects = *outlet_id*") ///
 addnotes("Notes: $notes_ols_nat $notes_dep $notes_vote $notes_se" ///
 "* p<0.10, ** p<0.05, *** p<0.01")










 

********************************
*                              *
* PART 5: EFFECT HETEROGENEITY *
*                              *
******************************** 



***** Table B12: Regression of newspaper slant on co-owned slant, by left-right scores of newspapers and owners
use "outlet party level data.dta", clear
global notes_ols2 = "OLS estimates, using data at the newspaper-ideology level (N = 1,016). Observations do not include single-newspaper owners."
global notes_inter = "The models include all constituent terms of the interactions (output omitted)."
global notes_dep = "Dependent variable: share of ideological phrases per million overall phrases."
global notes_se = "Standard errors (in parentheses) are clustered by owner. Values in brackets are wild cluster bootstrap p-values."
global notes_vote = "Market ideology is measured as the parties' number of votes in the newspaper's area of circulation, where each municipality's vote outcome is weighted by the share of readers living in the municipality."

eststo clear
quietly eststo: reg slant c.owner_slant##rile_score_xt w_votes82_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest 2.rile_score_xt#c.owner_slant, nogr seed(1234)
				boottest 3.rile_score_xt#c.owner_slant, nogr seed(1234)
				boottest 4.rile_score_xt#c.owner_slant, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant c.owner_slant##rile_score_xt w_votes18_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest 2.rile_score_xt#c.owner_slant, nogr seed(1234)
				boottest 3.rile_score_xt#c.owner_slant, nogr seed(1234)
				boottest 4.rile_score_xt#c.owner_slant, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
quietly eststo: reg slant c.owner_slant##owner_rile_score_notself_xt w_votes82_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest 2.owner_rile_score_notself_xt#c.owner_slant, nogr seed(1234)
				boottest 3.owner_rile_score_notself_xt#c.owner_slant, nogr seed(1234)
				boottest 4.owner_rile_score_notself_xt#c.owner_slant, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant c.owner_slant##owner_rile_score_notself_xt w_votes18_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
				boottest 2.owner_rile_score_notself_xt#c.owner_slant, nogr seed(1234)
				boottest 3.owner_rile_score_notself_xt#c.owner_slant, nogr seed(1234)
				boottest 4.owner_rile_score_notself_xt#c.owner_slant, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
esttab, star(* 0.10 ** 0.05 *** 0.01) se compress nonotes varwidth(44) noobs ///
 cells(b(fmt(3) star) se(par fmt(3))) modelwidth(12) nodepvar nomtitles ///
 scalars("r2_a Adj. R^2") sfmt(3) ///
 title(Table B12: Regression of newspaper slant on co-owned slant, by left-right scores of newspapers and owners) ///
 keep(w_votes82_ w_votes18_ owner_slant ///
 2.rile_score_xt#c.owner_slant 3.rile_score_xt#c.owner_slant 4.rile_score_xt#c.owner_slant ///
 2.owner_rile_score_notself_xt#c.owner_slant 3.owner_rile_score_notself_xt#c.owner_slant ///
 4.owner_rile_score_notself_xt#c.owner_slant) ///
 order(owner_slant 2.rile_score_xt#c.owner_slant 3.rile_score_xt#c.owner_slant ///
 4.rile_score_xt#c.owner_slant 2.owner_rile_score_notself_xt#c.owner_slant ///
 3.owner_rile_score_notself_xt#c.owner_slant 4.owner_rile_score_notself_xt#c.owner_slant) ///
 refcat(2.rile_score_xt#c.owner_slant "Newspaper's left-right score (reference category: 1st quartile)" ///
 2.owner_rile_score_notself_xt#c.owner_slant "Owner's left-right score (reference category: 1st quartile)") ///
 coeflabels(owner_slant "Avg. slant of other newspapers by same owner" ///
 2.rile_score_xt#c.owner_slant "Avg. slant others x 2nd quartile" ///
 3.rile_score_xt#c.owner_slant "Avg. slant others x 3rd quartile" ///
 4.rile_score_xt#c.owner_slant "Avg. slant others x 4th quartile" ///
 2.owner_rile_score_notself_xt#c.owner_slant "Avg. slant others x 2nd quartile" ///
 3.owner_rile_score_notself_xt#c.owner_slant "Avg. slant others x 3rd quartile" ///
 4.owner_rile_score_notself_xt#c.owner_slant "Avg. slant others x 4th quartile" ///
 w_votes82_ "Market ideology (according to 1982 election)" ///
 w_votes18_ "Market ideology (according to 2018 election)") ///
 indicate("Ideology fixed effects = *party_id*" "Newspaper fixed effects = *outlet_id*") ///
 addnotes("Notes: $notes_ols2 $notes_dep $notes_inter $notes_vote $notes_se" ///
 "* p<0.10, ** p<0.05, *** p<0.01")
 


***** Table B13: Regression of newspaper slant on co-owned slant, by previous party ownership
use "outlet party level data.dta", clear
global notes_ols2 = "OLS estimates, using data at the newspaper-ideology level (N = 1,016). Observations do not include single-newspaper owners."
global notes_dep = "Dependent variable: share of ideological phrases per million overall phrases."
global notes_se = "Standard errors (in parentheses) are clustered by owner. Values in brackets are wild cluster bootstrap p-values."
global notes_vote = "Market ideology is measured as the parties' number of votes in the newspaper's area of circulation, where each municipality's vote outcome is weighted by the share of readers living in the municipality."
global notes_party_o = "Previous party ownership is a binary variable that takes the value 1 for newspapers previously owned by a political party."

eststo clear
quietly eststo: reg slant c.owner_slant##prev_party_owned w_votes82_ county_id* i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
                boottest 1.prev_party_owned, nogr seed(1234)
                boottest 1.prev_party_owned#c.owner_slant, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant c.owner_slant##prev_party_owned w_votes18_ county_id* i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
                boottest 1.prev_party_owned, nogr seed(1234)
                boottest 1.prev_party_owned#c.owner_slant, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
quietly eststo: reg slant c.owner_slant##prev_party_owned w_votes82_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
                boottest 1.prev_party_owned, nogr seed(1234)
                boottest 1.prev_party_owned#c.owner_slant, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant c.owner_slant##prev_party_owned w_votes18_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
                boottest 1.prev_party_owned, nogr seed(1234)
                boottest 1.prev_party_owned#c.owner_slant, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
esttab, star(* 0.10 ** 0.05 *** 0.01) se compress nonotes varwidth(44) noobs ///
 cells(b(fmt(3) star) se(par fmt(3))) modelwidth(12) nodepvar nomtitles ///
 scalars("r2_a Adj. R^2") sfmt(3) ///
 title(Table B13: Regression of newspaper slant on co-owned slant, by previous party ownership) ///
 keep(w_votes82_ w_votes18_ owner_slant 1.prev_party_owned 1.prev_party_owned#c.owner_slant) ///
 order(owner_slant) ///
 coeflabels(owner_slant "Avg. slant of other newspapers by same owner" ///
 w_votes82_ "Market ideology (according to 1982 election)" ///
 w_votes18_ "Market ideology (according to 2018 election)" ///
 1.prev_party_owned "Previous party ownership (yes/no)" ///
 1.prev_party_owned#c.owner_slant "Avg. slant others x prev. party ownership") ///
 indicate("Ideology fixed effects = *party_id*" "County fixed effects = county_id*" ///
 "Newspaper fixed effects = *outlet_id*") ///
 addnotes("Notes: $notes_ols2 $notes_dep $notes_party_o $notes_vote $notes_se" ///
 "* p<0.10, ** p<0.05, *** p<0.01")
 
 

***** Table B14: Regression of newspaper slant on co-owned slant, by newspaper's subsidy status
use "outlet party level data.dta", clear
global notes_ols2 = "OLS estimates, using data at the newspaper-ideology level (N = 1,016). Observations do not include single-newspaper owners."
global notes_dep = "Dependent variable: share of ideological phrases per million overall phrases."
global notes_se = "Standard errors (in parentheses) are clustered by owner. Values in brackets are wild cluster bootstrap p-values."
global notes_vote = "Market ideology is measured as the parties' number of votes in the newspaper's area of circulation, where each municipality's vote outcome is weighted by the share of readers living in the municipality."

eststo clear
quietly eststo: reg slant c.owner_slant##subsidized w_votes82_ county_id* i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
                boottest 1.subsidized, nogr seed(1234)
                boottest 1.subsidized#c.owner_slant, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant c.owner_slant##subsidized w_votes18_ county_id* i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
                boottest 1.subsidized, nogr seed(1234)
                boottest 1.subsidized#c.owner_slant, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
quietly eststo: reg slant c.owner_slant##subsidized w_votes82_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
                boottest 1.subsidized, nogr seed(1234)
                boottest 1.subsidized#c.owner_slant, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant c.owner_slant##subsidized w_votes18_ i.outlet_id i.party_id, cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
                boottest 1.subsidized, nogr seed(1234)
                boottest 1.subsidized#c.owner_slant, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
esttab, star(* 0.10 ** 0.05 *** 0.01) se compress nonotes varwidth(44) noobs ///
 cells(b(fmt(3) star) se(par fmt(3))) modelwidth(12) nodepvar nomtitles ///
 scalars("r2_a Adj. R^2") sfmt(3) ///
 title(Table B14: Regression of newspaper slant on co-owned slant, by newspaper's subsidy status) ///
 keep(w_votes82_ w_votes18_ owner_slant 1.subsidized 1.subsidized#c.owner_slant) order(owner_slant) ///
 coeflabels(owner_slant "Avg. slant of other newspapers by same owner" ///
 1.subsidized "Subsidized (yes/no)" ///
 1.subsidized#c.owner_slant "Avg. slant others x subsidized" ///
 w_votes82_ "Market ideology (according to 1982 election)" ///
 w_votes18_ "Market ideology (according to 2018 election)") ///
 indicate("Ideology fixed effects = *party_id*" "County fixed effects = county_id*" ///
 "Newspaper fixed effects = *outlet_id*") ///
 addnotes("Notes: $notes_ols2 $notes_dep $notes_vote $notes_se" ///
 "* p<0.10, ** p<0.05, *** p<0.01")



***** Table B15: Newspaper slant and co-owned slant before and after ownership change
use "outlet party level data.dta", clear
sort outlet party tm_min, stable
by outlet party: gen after = _n-1
global notes_ols_change = "OLS estimates, using data at the newspaper-ideology level (N = 264). Observations only include newspapers with a change in ownership during the sample period."
global notes_dep = "Dependent variable: share of ideological phrases per million overall phrases."
global notes_se = "Standard errors (in parentheses) are clustered by owner. Values in brackets are wild cluster bootstrap p-values."
global notes_vote = "Market ideology is measured as the parties' number of votes in the newspaper's area of circulation, where each municipality's vote outcome is weighted by the share of readers living in the municipality."

eststo clear
quietly eststo: reg slant c.owner_slant##after w_votes82_ county_id* i.party_id if !missing(transaction), cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
                boottest 1.after, nogr seed(1234)
                boottest 1.after#c.owner_slant, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant c.owner_slant##after w_votes18_ county_id* i.party_id if !missing(transaction), cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
                boottest 1.after, nogr seed(1234)
                boottest 1.after#c.owner_slant, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
quietly eststo: reg slant c.owner_slant##after w_votes82_ i.outlet_id i.party_id if !missing(transaction), cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
                boottest 1.after, nogr seed(1234)
                boottest 1.after#c.owner_slant, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant c.owner_slant##after w_votes18_ i.outlet_id i.party_id if !missing(transaction), cluster(owner_id)
                boottest owner_slant, nogr seed(1234)
                boottest 1.after, nogr seed(1234)
                boottest 1.after#c.owner_slant, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
esttab, star(* 0.10 ** 0.05 *** 0.01) se compress nonotes varwidth(44) noobs ///
 cells(b(fmt(3) star) se(par fmt(3))) modelwidth(12) nodepvar nomtitles ///
 scalars("r2_a Adj. R^2") sfmt(3) ///
 title(Table B15: Newspaper slant and co-owned slant before and after ownership change) ///
 keep(w_votes82_ w_votes18_ owner_slant 1.after 1.after#c.owner_slant) order(owner_slant) ///
 coeflabels(owner_slant "Avg. slant of other newspapers by same owner" ///
 1.after "After acquisition" 1.after#c.owner_slant "Avg. slant others x acquisition" ///
 w_votes82_ "Market ideology (according to 1982 election)" ///
 w_votes18_ "Market ideology (according to 2018 election)") ///
 indicate("Ideology fixed effects = *party_id*" "County fixed effects = county_id*" ///
 "Newspaper fixed effects = *outlet_id*") ///
 addnotes("Notes: $notes_ols_change $notes_dep $notes_vote $notes_se" ///
 "* p<0.10, ** p<0.05, *** p<0.01")



***** Table B16: Comparison of newspaper slant of opinion articles with the slant of straight news
use "outlet party level data.dta", clear
global notes_ols_opinion = "OLS estimates, using data at the newspaper-ideology level (N = 936). Observations do not include single-newspaper owners."
global notes_dep_opinion = "Dependent variable: share of ideological phrases per million overall phrases in opinion articles."
global notes_vote = "Market ideology is measured as the parties' number of votes in the newspaper’s area of circulation, where each municipality’s vote outcome is weighted by the share of readers living in the municipality."
global notes_se = "Standard errors (in parentheses) are clustered by owner. Values in brackets are wild cluster bootstrap p-values."

eststo clear
quietly eststo: reg slant_opinion slant_nonopinion w_votes82_ county_id* i.party_id if !missing(owner_slant_opinion), cluster(owner_id)
                boottest slant_nonopinion, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant_opinion slant_nonopinion w_votes18_ county_id* i.party_id if !missing(owner_slant_opinion), cluster(owner_id)
                boottest slant_nonopinion, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
quietly eststo: reg slant_opinion slant_nonopinion w_votes82_ i.outlet_id i.party_id if !missing(owner_slant_opinion), cluster(owner_id)
                boottest slant_nonopinion, nogr seed(1234)
				boottest w_votes82_, nogr seed(1234)
quietly eststo: reg slant_opinion slant_nonopinion w_votes18_ i.outlet_id i.party_id if !missing(owner_slant_opinion), cluster(owner_id)
                boottest slant_nonopinion, nogr seed(1234)
				boottest w_votes18_, nogr seed(1234)
esttab, star(* 0.10 ** 0.05 *** 0.01) se compress nonotes varwidth(44) noobs ///
 cells(b(fmt(3) star) se(par fmt(3))) modelwidth(12) nodepvar ///
 scalars("r2_a Adj. R^2") sfmt(3 3 3) ///
 title(Table B16: Comparison of newspaper slant of opinion articles with the slant of straight news) ///
 keep(w_votes82_ w_votes18_ slant_nonopinion) order(slant_nonopinion) ///
 coeflabels(slant_nonopinion "Slant of straight news articles by the same newspaper" ///
 w_votes82_ "Market ideology (according to 1982 election)" ///
 w_votes18_ "Market ideology (according to 2018 election)") ///
 indicate("Ideology fixed effects = *party_id*" "County fixed effects = county_id*" ///
 "Newspaper fixed effects = *outlet_id*") ///
 addnotes("Notes: $notes_ols_opinion $notes_dep_opinion $notes_vote $notes_se" ///
 "* p<0.10, ** p<0.05, *** p<0.01") 
 
 
 
 
 
 
 
 
 
 
 
 
*********************************
*                               *
* PART 6: MARKET LEVEL OUTCOMES *
*                               *
*********************************
 
 

***** Figure B1: Newspapers' scope of local coverage
use "outlet municipality level data.dta", clear
gen n = 1
collapse (sum) n, by(outlet owner)

hist n, discr scheme(s2mono) graphregion(color(white)) percent scale(1.2) ///
        ytitle("Percent of newspapers" " ") xtitle(" " "Number of targeted municipalities") ///
		ylabel(,angle(0)) xlabel(1(5)26)



***** Figure B6: Number of owners per municipality
use "outlet municipality level data.dta", clear
keep municipality owner
duplicates drop 

gen n = 1
collapse (sum) n, by(municipality)

hist n, discr scheme(s2mono) graphregion(color(white)) percent scale(1.2) ///
        ytitle("Percent of municipalities" " ") xtitle(" " "Number of owners") ///
		ylabel(,angle(0)) xlabel(1(1)5)
 


* Figure B7: Most dominant newspaper owners, by municipality
use "owner municipality level data.dta", clear
sort municipality owner, stable
by municipality: egen max_circ = max(percent_hh)
keep if max_circ == percent_hh
keep owner municipality KnKod

gen owner_id = 1
replace owner_id = 11 if owner == "Mittmedia"
replace owner_id = 10 if owner == "Gota Media AB"
replace owner_id = 9 if owner == "NTM-koncernen"
replace owner_id = 8 if owner == "Bonnier"
replace owner_id = 7 if owner == "Nya Wermlands-Tidningen"
replace owner_id = 6 if owner == "Promedia"
replace owner_id = 5 if owner == "Stampen"
replace owner_id = 4 if owner == "Hall Media"
replace owner_id = 3 if owner == "Pukslagaren i Helsingborg"
replace owner_id = 2 if owner == "Stiftelsen VK-press"

sort KnKod, stable
gen id = _n

spmap owner_id using map_coordinates.dta, id(id) legend(position(4) ///
 bmargin(60 0 65 0)) legstyle(2) ylabel(, nogrid) xscale(off) yscale(off) ysize(7) ///
 graphregion(color(white)) clmethod(custom) clbreaks(0 1 2 3 4 5 6 7 8 9 10 11) ///
 fcolor(Set3) legend(label(12 "Mittmedia") label(11 "Gota Media AB") ///
 label(10 "NTM-koncernen") label(9 "Bonnier") label(8 "Nya Wermlands-Tidningen") ///
 label(7 "Promedia") label(6 "Stampen") label(5 "Hall Media") ///
 label(4 "Pukslagaren i Helsingborg") label(3 "Stiftelsen VK-press") ///
 label(2 "other")) 
 


***** Figure B8: Variation in fit between municipality-level slant and consumer preferences
use "municipality party level data.dta", clear 

rangestat (corr) slant sh18, interval(mun_id 0 0)
rename corr_x corr_18
drop corr_nobs

collapse (mean) corr_18 age total_income ///
 higher_education population avg_read, by(municipality county)

corr corr_18 age total_income ///
 higher_education population avg_read
 
hist corr_18, bin(16) scheme(s2mono) graphregion(color(white)) percent scale(1.2) ///
        ytitle("Percent of municipalities" " ") xtitle(" " "Correlation between avg. slant and 2018 vote shares") ///
		ylabel(,angle(0)) xlabel()
	


**** Figure B9: Variation in fit between municipality-level slant and consumer preferences, by characteristics of municipalities 
* A: Population size
corr corr_18 population
local corr: di %4.3f r(rho)
twoway (lfitci population corr_18) ///
       (scatter population corr_18 if population < 200000, m(O) msize(*0.7)), ///
	   scheme(s2mono) graphregion(color(white)) legend(off) ///
	   ytitle("Number of inhabitants") ///
	   xtitle(" " "Correlation between avg. slant and 2018 vote shares") ///
	   ylabel(, angle(0) nogrid) xlabel() scale(1.3) ///
	   caption(" Correlation:" "`corr'", pos(3) size(medsmall))	      
* B: Age
corr corr_18 age
local corr: di %4.3f r(rho)
twoway (lfitci age corr_18) ///
       (scatter age corr_18, m(O) msize(*0.7)), ///
	   scheme(s2mono) graphregion(color(white)) legend(off) ///
	   ytitle("Average age (years)") ///
	   xtitle(" " "Correlation between avg. slant and 2018 vote shares") ///
	   ylabel(, angle(0) nogrid) xlabel() scale(1.3) ///
	   caption(" Correlation:" "`corr'", pos(3) size(medsmall))
* C: Education
corr corr_18 higher_education
local corr: di %4.3f r(rho)
twoway (lfitci higher_education corr_18) ///
       (scatter higher_education corr_18, m(O) msize(*0.7)), ///
	   scheme(s2mono) graphregion(color(white)) legend(off) ///
	   ytitle("Share with higher education degree") ///
	   xtitle(" " "Correlation between avg. slant and 2018 vote shares") ///
	   ylabel(, angle(0) nogrid) xlabel() scale(1.3) ///
	   caption(" Correlation:" "`corr'", pos(3) size(medsmall))
* D: Income
corr corr_18 total_income
local corr: di %4.3f r(rho)
twoway (lfitci total_income corr_18) ///
       (scatter total_income corr_18, m(O) msize(*0.7)), ///
	   scheme(s2mono) graphregion(color(white)) legend(off) ///
	   ytitle("Yearly income (100 SEK)") ///
	   xtitle(" " "Correlation between avg. slant and 2018 vote shares") ///
	   ylabel(, angle(0) nogrid) xlabel() scale(1.3) ///
	   caption(" Correlation:" "`corr'", pos(3) size(medsmall))
* E: Readership
corr corr_18 avg_read
local corr: di %4.3f r(rho)
twoway (lfitci avg_read corr_18) ///
       (scatter avg_read corr_18, m(O) msize(*0.7)), ///
	   scheme(s2mono) graphregion(color(white)) legend(off) ///
	   ytitle("Overall share of newspaper readers") ///
	   xtitle(" " "Correlation between avg. slant and 2018 vote shares") ///
	   ylabel(, angle(0) nogrid) xlabel() scale(1.3) ///
	   caption(" Correlation:" "`corr'", pos(3) size(medsmall))
	
		
		
 
